#ifndef __TLV_PROTOCOL_H
#define __TLV_PROTOCOL_H

// --- 客户端发送给服务器的命令类型 ---
#define CMD_CD      1
#define CMD_PWD     2
#define CMD_LS      3
#define CMD_GETS    4
#define CMD_PUTS    5
#define CMD_REMOVE  6
#define CMD_MKDIR   7
#define CMD_RMKDIR  8

// --- 服务器返回给客户端的响应类型 ---
#define RESP_OK           100 // 通用成功响应
#define RESP_ERROR        101 // 通用错误响应
#define RESP_LS_RESULT    102 // ls命令的结果
#define RESP_PWD_RESULT   103 // pwd命令的结果
#define RESP_FILE_DATA    104 // gets命令返回的文件数据
#define RESP_SUCCESS_MR   107 // 创建删除成功响应
#define RESP_FAILURE_MR   108 // 创建删除失败响应

// 默认存储路径
#define DEFAULT_STORAGE_PATH "download"

typedef struct tlv_header_s {
    int type;
    int length;
} tlv_header_t;

// 发送一个完整的 TLV 包
int send_tlv(int sockfd, int type, const char* value, int length);
// 确保发送所有数据 (处理TCP短写)
int send_all(int sockfd, const void* buffer, int length);
// 确保接收所有数据 (处理TCP短读)
int recv_all(int sockfd, void* buffer, int length);
// 响应处理
int receive_and_process_response(int sockfd);
// 下载函数
int receive_file_content(int sockfd, char *local_filename);
// 上传响应处理
int wait_for_response_type(int sockfd);

#endif
